package fila;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

import util.Gerador;

public class MD1 {
	
	private Double lambda;
	private Double mi;
	
	public MD1(Double lambda, Double mi) {
		this.lambda = lambda;
		this.mi = mi;
	}
	
	public List<Double> runFCFS(Integer limite) {
		List<Double> amostrasTempo = new ArrayList<Double>();

		Queue<Double> fila = new LinkedList<Double>();

		double tempoServico = 1/this.mi;
        double proximaChegada = Gerador.getExponencial(this.lambda);
        double proximaSaida = proximaChegada + tempoServico;
        
        while(amostrasTempo.size() < limite) {
        	if (proximaChegada < proximaSaida) {
        		fila.add(proximaChegada);
                proximaChegada += Gerador.getExponencial(this.lambda);
            } else {
	        	double tempo = proximaSaida - fila.poll();
	            
	            amostrasTempo.add(tempo);
	
	            if (fila.isEmpty())
	            	proximaSaida = proximaChegada + tempoServico;
	            else {
	            	proximaSaida += tempoServico;
	            }
            }
        }
        
        return amostrasTempo;
	}

}
